package ThreadDemo;
/*
* 静态方法锁
*
* 在一个静态方法上如果使用synchronized后，同样的锁对象不可选，但不是this，而是当前类的对象（class的一个实例）
*注:类对象会在后去反射课程中详细介绍
*
* 静态方法上如果使用synchronized，那么该方法一定是同步的
* */
public class SyncDome3 {
    public static void main(String[] args) {
        Boo b1=new Boo();
        Boo b2=new Boo();
       Thread t1=new Thread(){

           public void run() {
           b1.dosome();
           }
       };
        Thread t2=new Thread(){

            public void run() {
                b2.dosome();
            }
        };
        t1.start();
        t2.start();
    }
}

class Boo{
    //public synchronized static void dosome(){
    public static void dosome(){
        /*
        * 静态方法中如果使用同步块时，指定的同步监视器对象应当也是类对象，
        * 指定时的语法：类名.class
        *
        * 注：
        * 类对象指的是class的一个实例，当我们使用到这一个类时，jvm就会去加载这个类的.class文件，并且
        * 随之生成一个Class的实例来保存加载的这个类的信息，在jvm内部每一个被加载的类都有与之绑定*/
        synchronized (Boo.class){
        try {
            Thread t=Thread.currentThread();
            System.out.println(t.getName()+"正在执行dosmoe方法。。。");
            Thread.sleep(5000);
            System.out.println(t.getName()+"执行dosmoe方法完毕");
        } catch (InterruptedException e) {

        }
    }
}}